package com.example.wxpay.api;

import com.example.wxpay.sdk.WXPayUtil;
import com.example.wxpay.utils.HttpClientUtils;

import java.util.HashMap;
import java.util.Map;

/**
 * 微信支付
 */
public class WXPayUtils {


    /**
     * 微信统一下单接口
     * @param notify_url    回调地址
     * @param out_trade_no  商户订单号
     * @param total_fee     订单总金额
     * @param ip            IP
     * @param body          商品内容描述
     * @param openid        微信用户  OPENID
     * @return
     * @throws Exception
     */
    public Map<String,String> wxPay(String notify_url, String out_trade_no,String total_fee,String ip,String body,String openid) throws Exception {
        Map<String,String> mp = new HashMap<>();
        mp.put("app_id",WXPayConfig.getAppID());            //公众帐号ID
        mp.put("mch_id",WXPayConfig.getMchID());            //商户号
        mp.put("nonce_str",WXPayUtil.generateNonceStr());   //随机字符串
        mp.put("body",body);                                //商品描述
        mp.put("out_trade_no",out_trade_no);                //商品订单号
        mp.put("total_fee",total_fee);                      //订单总金额,单位为分
        mp.put("spbill_create_ip",ip);                      //终端IP
        mp.put("notify_url",notify_url);                    //异步接收微信支付结果通知的回调地址，通知url必须为外网可访问的url,不能携带参数
        mp.put("trade_type","NATIVE");                      //交易类型（JSAPI公众号支付/NATIVE扫码支付/APP支付）
        mp.put("product_id",out_trade_no);                  //trade_type=NATIVE时（即扫码支付），此参数为二维码中包含的商品ID，商户自行定义。
        String sign = WXPayUtil.generateSignature(mp,WXPayConfig.getKey());

        StringBuilder sb = new StringBuilder();
        sb.append("<xml>");
        sb.append("<appid>" + mp.get("appid") + "</appid>");
        sb.append("<mch_id><![CDATA[" + mp.get("mch_id") + "]]></mch_id>");
        sb.append("<nonce_str><![CDATA[" + mp.get("nonce_str") +"]]></nonce_str>");
        sb.append("<body><![CDATA[" + mp.get("body") + "]]></body>");
        sb.append("<out_trade_no><![CDATA[" + mp.get("out_trade_no") + "]]></out_trade_no>");
        sb.append("<total_fee>" + mp.get("total_fee") + "</total_fee>" );
        sb.append("<spbill_create_ip><![CDATA[" + mp.get("spbill_create_ip") +"]]></spbill_create_ip>" );
        sb.append("<notify_url><![CDATA[" + mp.get("notify_url") + "]]></notify_url>" );
        sb.append("<trade_type><![CDATA[" + mp.get("trade_type") + "]]></trade_type>" );
        sb.append("<product_id><![CDATA[" + mp.get("product_id") + "]]></product_id>" );
        sb.append("<sign><![CDATA[" + mp.get("sign") + "]]></sign>" );
        sb.append("</xml>");

        String url = "https://api.mch.weixin.qq.com/pay/unifiedorder";
        //请求微信下单
        String str = HttpClientUtils.post(url,sb.toString());

        Map<String,String> retmap = new HashMap<>();
        try{
            retmap = WXPayUtil.xmlToMap(str);
        }catch (Exception e){
            e.printStackTrace();
        }
        return retmap;
    }
}










